package cn.biplam.common.bean.md;

import java.io.Serializable;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.client.DataFilter;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.UserInfo;
import cn.biplam.common.wrapper.sqlresult.SqlResult;

/**
 * 两个表之间的所有外键关系操作
 */
public abstract class MdFkRelationTableAll extends Bean implements Serializable{

	/**对象集合信息 */
	protected SqlResult sr;
	/**关系id */
	protected String re_Id;
	/**Md对象类型 */
	protected String modelType;
	/**用户信息 */
	protected UserInfo mUser;
	/**结果集游标信息 */
	protected int icount=-1;
	
	/** 关系id 字段名 */
	protected String REID;
	/** 关系名称 字段名 */
	protected String RE_NAME;
	/** 主表id 字段名 */
	protected String MAIN_TABLE_ID;
	/** 外键表id 字段名 */
	protected String FOREIGN_TABLE_ID;

	/**
	 * 取模型对象的表名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getReId() throws ErrorMessage;

	/**
	 * 取模型对象的表名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getReName() throws ErrorMessage;

	/**
	 * 取模型对象的表中文名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getMainTableId() throws ErrorMessage;

	/**
	 * 取模型对象的表说明
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getForeingTableId() throws ErrorMessage;

	/**
	 * 更新记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract void update(DataFilter filter) throws ErrorMessage;

	/**
	 * 插入记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract String insert(DataFilter filter) throws ErrorMessage;

	/**
	 * 根据关系id删除记录表关联信息
	 * @throws ErrorMessage
	 */
	public abstract void delete() throws ErrorMessage;

	/**
	 * 根据表关系id 删除表列属于此表关系id下的所有列关联
	 * @throws ErrorMessage
	 */
	public abstract void deleteRelaCol() throws ErrorMessage;

	/**
	 * 是否还有对象
	 * @return
	 */
	public abstract boolean haveNext();

	/**
	 * 移动指针到下一个
	 */
	public abstract void next();

	/**
	 * 判断对象信息是否存在
	 * @return
	 */
	public abstract boolean exist();
	
	/**
	 * 新建实例
	 * @param classParams 类参数
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdFkRelationTableAll getNewInstance(Object... classParams) throws ErrorMessage{
		return (MdFkRelationTableAll)get(MdFkRelationTableAll.class.getSimpleName(), classParams);
	}
	
	/**
	 * 新建实例
	 * @param mUser      用户信息
	 * @param modelType  业务对象类型
	 * @param mTalbeId   关系表主表id
	 * @param fTableId   关系表外键表id
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdFkRelationTableAll getNewInstance(UserInfo mUser,
			String modelType,String mTalbeId,String fTableId) throws ErrorMessage{
		return (MdFkRelationTableAll)get(MdFkRelationTableAll.class.getSimpleName(),
				mUser, modelType, mTalbeId, fTableId);
	}
	
	/** 关系id 字段名 */
	public abstract String getREID();
	/** 关系名称 字段名 */
	public abstract String getRE_NAME();
	/** 主表id 字段名 */
	public abstract String getMAIN_TABLE_ID();
	/** 外键表id 字段名 */
	public abstract String getFOREIGN_TABLE_ID();

}